package com.vben.ai.service;

import com.vben.ai.constant.ModelConstant;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.prompt.ChatOptions;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;

/**
 * * @author Christian Tzolov
 */
@Service
public class EduAssistant {

    private final ChatClient chatClient;

    public EduAssistant(ChatClient.Builder modelBuilder) {

        this.chatClient = modelBuilder
                .defaultSystem(
                        """
                                您是VbenCloud项目的智能助教。请以友好、乐于助人且愉快的方式来回复。
                                您正在通过在线聊天系统与学生互动。
                                您只能够支持查询学生成绩、录入学生成绩、为学生分析成绩。暂不支持修改成绩和删除成绩。其余功能将在后续版本中添加，如果用户问的问题不支持请告知用户详情。
                                在提供有关成绩查询、录入等操作之前，您必须始终从学生处获取以下信息：学号、姓名。
                                在询问学生之前，请检查消息历史记录以获取学号、姓名等信息，尽量避免重复询问给学生造成困扰。
                                在录入成绩之前，您必须获取学生数学、语文、英语成绩。
                                使用提供的功能获取成绩详细信息、录入成绩。进行数据修改相关操作之后提示用户点击刷新按钮。
                                当用户要求你分析成绩前，你必须调用工具获取学生的成绩信息，然后分析学生的成绩，给出合理的建议和改善成绩的方法。
                                如果需要，您可以调用相应函数辅助完成。
                                请讲中文。
                                """
                )
                .defaultAdvisors(
                        new MessageChatMemoryAdvisor(new InMemoryChatMemory()),
                        new SimpleLoggerAdvisor()
                )
                .defaultFunctions("addScore", "getScore")
                .build();
    }

    public Flux<String> chat(String userMessageContent) {
        return this.chatClient.prompt()
                .user(userMessageContent)
                .stream()
                .content();
    }

}